home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / emerald / emrldsys.lha / Language / Compiler / genutils.h < prev    next >
C/C++ Source or Header  |  1990-08-16  |  5KB  |  153 lines

  1. /*
  2.  * @(#)genutils.h    1.4  9/24/87
  3.  */
  4. #ifndef genutils_h
  5. #define genutils_h
  6.  
  7. #ifndef FILE
  8. #include "assert.h"
  9. #endif
  10.  
  11. #ifndef nodes_h
  12. #include "nodes.h"
  13. #endif
  14.  
  15. #ifndef datadesc_h
  16. #include "datadesc.h"
  17. #endif
  18.  
  19. #ifndef flags_h
  20. #include "flags.h"
  21. #endif
  22.  
  23. extern int  nextLabelNumber, currentInstruction,
  24.         nextObjectNumber, nextOperationNumber;
  25. extern OID  currentCodeOID;
  26. extern FILE *codeFile;
  27. extern NodePtr currentObject;
  28. extern int operationTempSize, operationMaxStack;
  29.  
  30. extern void saveRelocationInfo(), writeDD(), generateKernelCall(),
  31.         displayDD(), lineNumberComment(),
  32.         writeData(), writeHex(), writeWord(), initializeRelocationInfo(),
  33.         dumpRelocationInfo(), initializeTemplates(), initializeTemplate(),
  34.         saveShortDynamicTemplate(), saveShortStaticTemplate(),
  35.         saveRegisterTemplate(), dumpTemplate(), dumpTemplates(),
  36.         ensureGenerate(), generate(), forceLineNumber(),
  37.         generateEnterOperation(), generateReturn(), generateCallC(),
  38.         writeHexComment(), generateBranch();
  39. extern char *addressToString();
  40. extern ODTag BuildTag();
  41. extern int findATOpNumber(), translateATOpNumberToCTOpNumber();
  42. extern NodePtr resolveOIDToCTOrAT(), resolveToCTOrAT(), 
  43.         getBestInfoFromExpression(), getBestInfoFromAbCon();
  44. extern OID  getCodeID(), getID();
  45. extern DD   buildAbCon(), buildAbConFromObject(), buildConCon(),
  46.         increaseIndirection(), buildRegisterDD(), buildAddressDD(),
  47.         buildManifestDD(), buildRegisterDDNC(), buildLabelDD();
  48. extern DD nullDD, pusher, popper, nilDD;
  49. extern NodePtr nilNode;
  50. extern void freeDD();
  51. #define FREEDD(d) { freeDD(d); (d) = nullDD; }
  52. #define FREEV(v)  { FREEDD((v)->data) ; FREEDD((v)->abCon); }
  53. #define DISCARDDD(D) (D) = nullDD
  54. #define DISCARDV(v) {DISCARDDD((v)->data); DISCARDDD((v)->abCon); }
  55.  
  56. extern NodePtr getConcreteTypeFromAbCon(), ATCTOIDToCTPtr();
  57. extern int getElementTypeSize(), getSymbolSize();
  58. extern Symbol getElementTypeSymbol();
  59. extern Brand abConToBrand();
  60. extern Boolean isPop();
  61. #define writeTag(t) (writeHex(*(unsigned *) &(t)))
  62. #define ISMANIFEST(st) (! isARealImport(st))
  63.  
  64. typedef struct sIPMapCEntry {
  65.   int         codeLabel;
  66.   int         dataLabel;
  67.   int         value;
  68. } IPMapCEntry, *IPMapCEntryPtr;
  69.  
  70. typedef struct sIPMapCollector {
  71.   int         maxSize;
  72.   int         nextToFill;
  73.   int         lowCodeLabel;
  74.   IPMapCEntry     entry[1];
  75. } IPMapCollector, *IPMapCollectorPtr;
  76. extern IPMapCollectorPtr lineNumberMap, unavailableHandlerMap, failureHandlerMap;
  77. extern Boolean mapHasEntries();
  78. extern IPMapCollectorPtr createIPMap();
  79. extern void addToIPMap(), dumpIPMap();
  80. extern void initializeMaps(), finalizeMaps(), dumpMaps();
  81. extern void blockStart(), blockEnd();
  82. extern Boolean wroteCode, DDNeedsLabel();
  83. extern void HSPush(), HSDump();
  84. extern DD preemptAndAssign(), generateCompare();
  85. extern void emitBranchOnBit(), writeLabel();
  86.  
  87. typedef struct sLoopRecord {
  88.   int             label;
  89.   struct sLoopRecord    *enclosing;
  90. } LoopRecord, *LoopRecordPtr;
  91. extern LoopRecordPtr loops;
  92. #define inRange(A,B,C) ((A) >= (B) && (A) <= (C))
  93. extern char *registerName[];
  94. #define RN(A) registerName[(int)(A)]
  95.  
  96. #ifdef vax
  97. #   define ALIGNDIRECTIVE "\t.align\t2\n"
  98. #   define IMMEDIATECHAR '$'
  99. #   define GLOBALVARINDICATOR "*$"
  100. #   define COMMENTCHAR '#'
  101. #   define SETLASTJUMPFROM "\tmoval\t8f,*$_lastJumpFrom\n8:\n"
  102. #   define FLOATJUMPCHAR ""
  103. #   define POPABCON "\taddl2\t$4,sp\n"
  104. #endif
  105. #ifdef sun
  106. #   define ALIGNDIRECTIVE ""
  107. #   define IMMEDIATECHAR '#'
  108. #   define GLOBALVARINDICATOR ""
  109. #   define COMMENTCHAR '|'
  110. #   define SETLASTJUMPFROM "\tpea\tpc@(8f-.-2:l)\n\tmovl\tsp@+,_lastJumpFrom\n8:\n"
  111. #   define FLOATJUMPCHAR "f"
  112. #   define POPABCON "\taddqw\t#4,sp\n"
  113. #endif
  114. void jumpDebug(), jumpCheck(), initializeJumpDebug(), finalizeJumpDebug();
  115. #define JUMPDEBUG() if (gdflag) jumpDebug();
  116. #define JUMPCHECK() if (gdflag) jumpCheck();
  117. #define INITIALIZEJUMPDEBUG() if (gdflag) initializeJumpDebug();
  118. #define FINALIZEJUMPDEBUG() if (gdflag) finalizeJumpDebug();
  119.  
  120. #ifdef vax
  121. #define INC(X) if (gmflag && doGenerateCode) {\
  122.   X ++; \
  123.   emit("\tincl\t*$ _%s\n", "X"); \
  124. }
  125. #endif
  126. #ifdef sun
  127. #define INC(X) if (gmflag && doGenerateCode) {\
  128.   X ++; \
  129.   emit("\taddql\t#1,_%s\n", "X"); \
  130. }
  131. #endif
  132. #ifdef vax
  133. #define INCC(X) if (gmflag && doGenerateCode) {\
  134.   X ++; \
  135.   emit("\tmovpsl\t-(sp)\n"); \
  136.   emit("\tcvtlw\t(sp)+,-(sp)\n"); \
  137.   emit("\tbicw2\t$0xfff0,(sp)\n"); \
  138.   emit("\tincl\t*$ _%s\n", "X"); \
  139.   emit("\tbicpsw\t$0xf\n"); \
  140.   emit("\tbispsw\t(sp)+\n"); \
  141. }
  142. #endif
  143. #ifdef sun
  144. #define INCC(X) if (gmflag && doGenerateCode) {\
  145.   X ++; \
  146.   emit("\tmovw\tcc,sp@-\n"); \
  147.   emit("\taddql\t#1,_%s\n", "X"); \
  148.   emit("\tmovw\tsp@+,cc\n"); \
  149. }
  150. #endif
  151.  
  152. #endif
  153.